
new Vue({
    /* 挂载到DOM */
    el: '#app',

    data: {
        equation: '0',
        isDecimalAdded: false, //判断是否输入小数点
        isOperatorAdded: false, //判断是否输入运算符
        isStarted: false, //判断是否开始输入
    },

    methods: {

        isOperator(character) { //判断加减乘除
            return ['+', '-', 'x', '÷'].indexOf(character) > -1
        },

        append(character) { //判断输入数字

            // 如果第一次输入（不能输入运算符）
            if (this.equation === '0' && !this.isOperator(character)) {
                // 输入的是小鼠店
                if (character === '.') {
                    this.equation += '' + character;
                    this.isDecimalAdded = true;  // 限制输入小数点的条件
                } else {
                    this.equation = '' + character; //如果是数字直接赋值
                }

                this.isStarted = true; // 开始输入的标志

                return;
            }
            /* 之后继续输入 */
            //如果输入的是数字
            if (!this.isOperator(character)) {
                //如果输入的是小数点（并且已经输入过一次小数点）
                if (character === '.' && this.isDecimalAdded) { //直接返回
                    return
                }
                //如果输入的是小数点（并且上一步未输入小数点）
                if (character === '.') {
                    this.isDecimalAdded = true; // 限制输入小数点的条件
                    this.isOperatorAdded = true; // 限制输入运算符
                } else {
                    this.isOperatorAdded = false;
                }
                // 数字直接拼接
                this.equation += '' + character;
            }

            // 如果输入的是运算符（并且之前未输入过运算符）
            if (this.isOperator(character) && !this.isOperatorAdded) {
                this.equation += '' + character; //拼接运算符
                this.isDecimalAdded = false;
                this.isOperatorAdded = true; // 限制输入运算符
            }
        },

        calculate() { //判断输入等号时
            let result = this.equation.replace(new RegExp('x', 'g'), '*').replace(new RegExp('÷', 'g'), '/')
            this.equation = parseFloat(eval(result).toFixed(9)).toString();
            this.isOperatorAdded = false; //可以继续输入运算符
            this.isDecimalAdded = true; // 限制输入小数点的条件
        },

        calculateToggle() { //判断输入加减符号时
            // 如果开始输入且输入了运算符
            if (this.isStarted && this.isOperatorAdded) { //直接返回
                return;
            }
            this.calculate(); //先计算一次
            this.equation = this.equation + '* -1'; //再取反
            this.calculate();
        },

        calculatePercent() { //判断输入百分比符号时
            if (this.isStarted && this.isOperatorAdded) {
                return;
            }
            this.calculate(); //先计算一次
            this.equation = this.equation + '* 0.01'; //在去百分比
            this.calculate();
        },

        clear() { //判断输入AC时
            this.equation = '0';
            this.isDecimalAdded = false;
            this.isOperatorAdded = false;
            this.isStarted = false;
        }
    }
})